/**
 * 所有权转移示例：
 * 例子中
 * 1. 使用了所有权，而不获得所有权；
 * 2. 使用元组接受函数返回的所有权；
 * 3. 函数参数接受所有权后，又返回接收的所有权，叫做，所有权转移；
 */
fn main() {
    let s1 = String::from("hello");

    let (s2, len) = calculate_length(s1);

    // println!("{}", s1);
    //                ^^ value borrowed here after move
    println!("字符串'{}'的长度是 {} ", s2, len);
}

fn calculate_length(s: String) -> (String, usize) {
    let length = s.len(); // len() 返回字符串的长度

    (s, length)
}
